package vuelo;

import java.math.BigDecimal;
import java.util.Collection;

import asiento.Asiento;
import busqueda.Busqueda;
import filtro.Filtro;

public class VueloConEscala extends Vuelo {
	public static final long LIMITE_CONEXION = 1000*60*60;//medido en milisegundos
	private BigDecimal tiempoDeConexion;
	
	private Collection<VueloDirecto> vuelosDirectos;
	
	public VueloConEscala (Collection<VueloDirecto> vuelosDirectos){

		this.setVuelosDirectos(vuelosDirectos);
	}
	public void addVuelosDirectos(VueloDirecto vuelosDirectos) {
		this.vuelosDirectos.add(vuelosDirectos);
	}
	public VueloConEscala(VueloDirecto vueloDirectoOrigen, VueloDirecto vueloDirectoDestino) {
		vuelosDirectos.add(vueloDirectoOrigen);
		vuelosDirectos.add(vueloDirectoDestino);
	}

	@Override
	public BigDecimal dameTiempoDeVuelo() {
		BigDecimal tiempoDeVuelo = new BigDecimal(0);
		VueloDirecto vueloAnterior = null;
		for (VueloDirecto vueloDirecto : vuelosDirectos) {
			tiempoDeVuelo = tiempoDeVuelo.add(vueloDirecto.dameTiempoDeVuelo());
			tiempoDeVuelo = tiempoDeVuelo.add(vueloDirecto.horasEntre(vueloAnterior));
			vueloAnterior = vueloDirecto;
		}
//		tiempoDeVuelo=tiempoDeVuelo.add(this.getTiempoDeConexion());
		return tiempoDeVuelo;
	}

	@Override
	public BigDecimal damePrecioMaximo() {
		BigDecimal precio = new BigDecimal(0);
		for (VueloDirecto vueloDirecto : vuelosDirectos) {
			precio = precio.add(vueloDirecto.damePrecioMaximo());
		}
		return precio;
	}
	
	@Override
	public BigDecimal damePopularidad() {
		BigDecimal popularidad = new BigDecimal(0);
		for (VueloDirecto vueloDirecto : vuelosDirectos) {
			popularidad = popularidad.add(vueloDirecto.damePopularidad());
		}
		return popularidad;
	}
	
	@Override
	public Vuelo filtrar (Filtro filtro, Busqueda busqueda){
		for (VueloDirecto vueloDirecto : this.getVuelosDirectos()){
			filtro.filtrarVueloDirecto(vueloDirecto, busqueda);
		}
		if (this.getVuelosDirectos().size() == 2){
			return this;
		}
		else {
			return null;
			
		}
	}

	public void setVuelosDirectos(Collection<VueloDirecto> vuelosDirectos) {
		this.vuelosDirectos = vuelosDirectos;
	}

	public Collection<VueloDirecto> getVuelosDirectos() {
		return vuelosDirectos;
	}
	
	public BigDecimal precioDeUnaCombinacion(Collection<Asiento> asientos) {
		return null;
	}
	public void setTiempoDeConexion(BigDecimal tiempoDeConexion) {
		this.tiempoDeConexion = tiempoDeConexion;
	}
	public BigDecimal getTiempoDeConexion() {
		return tiempoDeConexion;
	}
	
	

//	@Override
//	public double damePopularidad(){
//		double acum = 0; 
//		for (VueloDirecto vuelo : this.getVuelosDirectos()){
//			 acum += vuelo.damePopularidad();
//		 }
//		return (acum /2);
//	}
}
